import time

import pandas as pd
import os
import numpy as np

import TimeUtil
import 去除企宽
from pppoe import get_pppoe_by_date


def remove_tab(s):
    if isinstance(s, str):
        return s.lstrip('\t')
    return s


# # 指定文件目录路径，可根据实际情况修改
# directory_path = "D:\\家宽\\ont"
# csv_files = [os.path.join(directory_path, file) for file in os.listdir(directory_path) if file.endswith('.csv')]
#
# all_ont = pd.DataFrame()
# for csv_file in csv_files:
#     ont = pd.read_csv(csv_file, encoding='gbk', usecols=['宽带账号', '上联设备'], dtype={'宽带账号': str})
#     ont.rename(columns={'宽带账号': 'account'}, inplace=True)
#     ont = ont.astype(str).apply(lambda x: x.str.lstrip('\t'))
#     all_ont = pd.concat([all_ont, ont], axis=0)
# data = pd.read_csv("D:\\temp\\radius数据\\1201_1231\\去除企宽用户.csv", dtype={'account': str})
# data['account'] = data['account'].str[1:]
# data = data.merge(all_ont, on='account')
# data.to_csv("D:\\temp\\radius数据\\1201_1231\\去除企宽用户2.csv", index=False)


# 账号对应分光器
def account_spliter():
    ont = pd.read_parquet(r"D:\家宽\ont\praquet", columns=['宽带账号', '上联设备', '生命周期状态'])
    ont.rename(columns={'宽带账号': 'account'}, inplace=True)
    print(ont.columns)
    ont = ont.apply(lambda x: x.str.lstrip('\t'))  # type:pd.DataFrame
    print(ont.columns)
    ont = ont[ont['生命周期状态'] == '在网']
    print(time.localtime())
    # 去重
    ont = ont.drop_duplicates()
    print(time.localtime())
    pos = pd.read_csv(r"D:\家宽\综资\综资数据(更新至2025年7月29日)\20250729170633_CONNECT_POS.csv",
                      usecols=['网元名称', '上级POS', '所属分纤箱', '所属小区'], encoding='ANSI')
    print(time.localtime())
    pos = pos.astype(str).apply(lambda x: x.str.lstrip('\t'))
    pos.rename(columns={'网元名称': '上联设备'}, inplace=True)
    print(time.localtime())
    ont = ont.merge(pos, on='上联设备')  # type:pd.DataFrame
    print(time.localtime())
    ont['一级分光器'] = np.where(ont['上级POS'] == '无', ont['上联设备'], ont['上级POS'])
    ont['二级分光器'] = np.where(ont['上级POS'] == '无', ont['上级POS'], ont['上联设备'])

    pos.rename(columns={
        '所属分纤箱': '一级分纤箱'
    }, inplace=True)
    ont = ont.merge(pos[['上联设备', '一级分纤箱']], right_on='上联设备', left_on='一级分光器', how='left')
    pos.rename(columns={
        '一级分纤箱': '二级分纤箱'
    }, inplace=True)
    ont = ont.merge(pos[['上联设备', '二级分纤箱']], right_on='上联设备', left_on='二级分光器', how='left')
    ont = ont[['account', '一级分光器', '二级分光器', '一级分纤箱', '二级分纤箱', '所属小区']]
    print(time.localtime())
    ont.to_csv("/temp/账号上联信息.csv", index=False)


def handler_pppoe():
    ont = pd.read_csv("D:\\temp\\账号上联信息.csv",
                      usecols=['account', '一级分光器', '二级分光器', '一级分纤箱', '二级分纤箱', '所属小区'],
                      dtype={'account': str})
    pppoe = pd.read_csv(get_pppoe_by_date(TimeUtil.parse("2025-05-22")), usecols=[0, 4, 5, 6, 7, 10]
                        , names=['account', 'OLT_IP', 'port', 'onuid', 'SN', 'pppoe上线时间'],
                        dtype=str)
    pppoe = pppoe[pppoe['pppoe上线时间'] > '2025-01-01']
    pppoe = pppoe.merge(ont, on='account')

    olt = pd.read_csv("D:\家宽\综资\综资数据(更新至2025年4月29日)\OLT业务表的配置查询结果.csv",
                      usecols=['管理IP', '所属机房'],
                      encoding="gbk")

    olt.rename(columns={'管理IP': 'OLT_IP'}, inplace=True)

    pppoe = pppoe.merge(olt, on='OLT_IP')

    pppoe.to_csv("/家宽/账号信息.csv", index=False)


def t(g):
    ip = g['BRAS_IP'].tolist()
    port = g['BRAS网元端口'].tolist()
    olt = g['OLT网元名称'].unique().tolist()
    if len(olt) > 1:
        print(g['OLT网元名称'])
    return pd.Series({
        'OLT网元名称': olt[0],
        'BRAS1_ip': ip[0],
        'BRAS2_ip': None if len(ip) == 1 else ip[1],
        'BRAS网元端口1': port[0],
        'BRAS网元端口2': None if len(port) == 1 else port[1]
    })


def handler_olt_bars():
    df = pd.read_csv("D:\\家宽\\综资\\综资文件(更新至2025年2月25日)\\OLT_BRAS资源关系表的配置查询结果.csv",
                     usecols=['OLT网元名称', 'OLT_IP', 'BRAS_IP', 'BRAS网元端口'],
                     encoding='gbk')
    df['BRAS网元端口'] = df['BRAS网元端口'].str.split('GigabitEthernet').str[1].fillna('')
    df = df.groupby(['OLT网元名称', 'OLT_IP', 'BRAS_IP'])['BRAS网元端口'].agg(lambda x: ';'.join(x)).reset_index()
    res = df.groupby('OLT_IP', as_index=False).apply(t)
    print(res)
    res.to_csv('/家宽/bras.csv', index=False)


def 账号上联():
    pd.read_csv('/家宽/bras.csv').merge(pd.read_csv("/家宽/账号信息.csv"), on='OLT_IP').to_csv('/家宽/账号上联信息.csv',
                                                                                               index=False)


if __name__ == '__main__':
    account_spliter()
    # handler_pppoe()
    # handler_olt_bars()
    # 账号上联()
